import pandas as pd
import numpy as np
# 创建包含内蒙古呼和浩特、包头、鄂尔多斯市近几年人口数据的DataFrame
population = {
    # 2019、2022年缺失
    '呼和浩特市': [312.48, np.nan, 344.61, 355.11, np.nan],
    # 2018、2021年缺失
    '包头市': [np.nan, 288.92, 290.37, np.nan, 273.80],
    # 2020年缺失
    '鄂尔多斯市': [207.84, 215.08, np.nan, 220.07, 220.76]
}
df = pd.DataFrame(data = population, index=[2018, 2019, 2020, 2021, 2022])
# 下面是Ch08-12.1的部分
# df_linear = df.interpolate(method='linear')
# print(df_linear)


# 下面是Ch08-12.2的部分
# 基于Ch08-12.1创建的[df]，注释Ch08-12.1的代码
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

# 构建多重填补模型
imputer = IterativeImputer(
    max_iter=10,  # 最大迭代次数
    random_state=42,  # 随机种子（保证可复现）
    sample_posterior=True  # 从后验分布中抽样
)
df_mice = pd.DataFrame(imputer.fit_transform(df),
                       columns=df.columns,
                       index=df.index).round(2)

print("多重填补结果：")
print(df_mice)

